package com.example.reggie.common.annotation;

import java.lang.annotation.*;

/**
 * 自定义操作日志记录注解
 *
 * @Target :  Target翻译中文为目标，即该注解可以声明在哪些目标元素之前，也可理解为注释类型的程序元素的种类。
 * ElementType.PACKAGE：该注解只能声明在一个包名前。
 * ElementType.ANNOTATION_TYPE：该注解只能声明在一个注解类型前。
 * ElementType.TYPE：该注解只能声明在一个类前。
 * ElementType.CONSTRUCTOR：该注解只能声明在一个类的构造方法前。
 * ElementType.LOCAL_VARIABLE：该注解只能声明在一个局部变量前。
 * ElementType.METHOD：该注解只能声明在一个类的方法前。
 * ElementType.PARAMETER：该注解只能声明在一个方法参数前。
 * ElementType.FIELD：该注解只能声明在一个类的字段前。
 * <p>
 * 此处是只能声明在一个方法参数前，只能声明在一个类的方法前
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
/**
 * @Retention ：Retention 翻译成中文为保留，可以理解为如何保留，即告诉编译程序如何处理，也可理解为注解类的生命周期。
 * RetentionPolicy.RUNTIME  : 注解保留在程序运行期间。
 * RetentionPolicy.SOURCE  : 注解只保留在源文件中。
 * RetentionPolicy.CLASS  : 注解保留在class文件中，在加载到JVM虚拟机时丢弃。
 *
 * 此处为保留在程序运行期间
 */
@Retention(RetentionPolicy.RUNTIME)
/** @Document 是 java 在生成文档，是否显示注解的开关*/
@Documented
/** 定义注解需使用 @interface关键词 ,并在接口上注明@Rentention(...) 或@Target(...) ，也可以把spring等注解加上来使用*/
public @interface Log {
    /**
     * 模块
     */
    public String value() default "";
}